#include <stdio.h>          // 标准输入输出
#include <stdlib.h>         // 标准函数库
#include <string.h>         // 字符串处理(操作字符数组)

#include "ohos_init.h"      // 用于初始化服务(services)和功能(features)
#include "cmsis_os2.h"      // CMSIS-RTOS API V2

#include "belt.h"           // belt传感器接口
#include "wifi_connecter.h" // easy wifi (station模式)
#include "mqtt_task.h"      // MQTT接口
#include "mqtt_api.h"       // 与服务器通信的mqtt API接口
#include "udp_client.h"     // 与车内设备通信的UDP API接口

#include "net_config.h"
#include "str_format.h"




#define CLIENT_ID "jitoa_anran0_belt_0"       // AP名称
void SetTrafficLightMain()
{

    while (1)
    {

        int id = 0;
        hi_u32 state = getBeltState();
        // hi_u32 state = 0;
        char payload[1024] ;
        // belt_str_format(payload,id, state) ; 
        belt_str_format( payload , id, state );
        publishBelt( payload ) ;
        SendUdpInfo(payload);


        Sleep(1000); // 休眠
    }
    return;
}

// 主线程函数
static void mqttDemoTask(void *arg)
{
    (void)arg;


    // 连接AP
    WifiDeviceConfig config = {0};                          // 定义热点配置
    strcpy(config.ssid, PARAM_HOTSPOT_SSID);                // 设置热点配置中的SSID
    strcpy(config.preSharedKey, PARAM_HOTSPOT_PSK);         // 设置热点配置中的密码
    config.securityType = PARAM_HOTSPOT_TYPE;               // 设置热点配置中的加密方式
    int netId = ConnectToHotspot(&config);                  // 连接到热点
    if (netId < 0)                                          // 检查是否成功连接到热点
    {
        printf("Connect to AP failed!\r\n");
    }

    printf("Connect to AP success!\r\n");
    
    // 初始化并启动MQTT任务，连接MQTT服务器
    MqttTaskInit();                                                             // 初始化并启动MQTT任务
    const char *host = PARAM_SERVER_ADDR;                                       // MQTT服务器IP地址
    unsigned short port = atoi(PARAM_SERVER_PORT);                              // MQTT服务器端口
    const char *clientId = CLIENT_ID;                                           // MQTT客户端ID
    const char *username = PARAM_SERVER_USERNAME;                               // MQTT服务器用户名
    const char *password = PARAM_SERVER_PASSWORD;                               // MQTT服务器密码
    if (MqttTaskConnect(host, port, clientId, username, password) == -1)        // 连接MQTT服务器
        printf("Connect to MQTT server failed!\r\n");
    else
        printf("Connect to MQTT server success!\r\n");
    // 输出发布成功信息

    // 初始化安全带
    InitBelt();
    inotUdpClient(PARAM_SERVER_ADDR, PARAM_SERVER_PORT);
    SetTrafficLightMain() ;
}
// 入口函数
static void mqttDemoEntry(void)
{

    // 定义线程属性
    osThreadAttr_t attr;
    attr.name = "mqttDemoTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 10240;
    attr.priority = osPriorityNormal;

    // 创建线程
    if (osThreadNew(mqttDemoTask, NULL, &attr) == NULL)
    {
        printf("[mqttDemoEntry] Falied to create mqttDemoTask!\n");
    }
}

// 运行入口函数
SYS_RUN(mqttDemoEntry);
